package org.example;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;

import java.util.*;

/**
 * @author zhangjg
 * @desc
 * @date 2023/05/18 19:37
 **/
@Slf4j
public class Excel {

    public static void main(String[] args) {

        List<OBean> map_wg_4 = new ArrayList<>();
        List<OBean> map_wg_5 = new ArrayList<>();
        List<OBean> map_wg_6 = new ArrayList<>();
        List<OBean> map_wg_1 = new ArrayList<>();
        List<OBean> map_wg_2 = new ArrayList<>();
        List<OBean> map_wg_3 = new ArrayList<>();
        Map<String, List<Object>> map_jf_1 = new HashMap<String, List<Object>>();
        Map<String, List<Object>> map_jf_2 = new HashMap<String, List<Object>>();
        Map<String, List<Object>> map_jf_3 = new HashMap<String, List<Object>>();
        Map<String, List<Object>> map_jf_4 = new HashMap<String, List<Object>>();
        Map<String, List<Object>> map_jf_5 = new HashMap<String, List<Object>>();
        Map<String, List<Object>> map_jf_6 = new HashMap<String, List<Object>>();

//        ExcelReader reader_wg = ExcelUtil.getReader(FileUtil.file("D:/tmp/ndb/数据比对(基础表)/基础对比/网管工程数据明细.xlsx"), 2);
        ExcelReader reader_wg = ExcelUtil.getReader(FileUtil.file("D:/tmp/ndb/数据比对(基础表)/基础对比/2.xlsx"), 0);
        List<List<Object>> list_wg = reader_wg.read(1);
        for (List<Object> l : list_wg) {
//          id,省份,地市,运营商,网络类型,设备型号,网管系列
//          1,2,3,11,5,6,12
//          0,1,2,10,4,5,11
//            log.info("{},{},{},{},{},{},{}",l.get(1),l.get(2),l.get(3),l.get(11),l.get(5),l.get(6),l.get(12));
            if (!"交换机".equals(l.get(4))) {
                map_wg_1.add(new OBean(l.get(1).toString(), l));
                map_wg_2.add(new OBean(l.get(1).toString() + l.get(2), l));
                map_wg_3.add(new OBean(l.get(1).toString() + l.get(2) + l.get(10), l));
                map_wg_4.add(new OBean(l.get(1).toString() + l.get(2) + l.get(10) + l.get(4), l));
                map_wg_5.add(new OBean(l.get(1).toString() + l.get(2) + l.get(10) + l.get(4) + l.get(5), l));
                map_wg_6.add(new OBean(l.get(1).toString() + l.get(2) + l.get(10) + l.get(4) + l.get(5) + l.get(11), l));
            }
        }

        ExcelReader reader_jf = ExcelUtil.getReader(FileUtil.file("D:/tmp/ndb/数据比对(基础表)/基础对比/在网网元数量-20230505.xlsx"), 3);
        List<List<Object>> list_jf = reader_jf.read(1);
        for (List<Object> l : list_jf) {
            //id,省份,地市,运营商,网络类型,设备型号,网管系列
            //1,2,3,4,9,11,24
//            1,2,3,8,10,23
//            log.info("{},{},{},{},{},{},{}",l.get(1),l.get(2),l.get(3),l.get(4),l.get(9),l.get(11),l.get(24));
            map_jf_1.put(l.get(1).toString(), l);
            map_jf_2.put(l.get(1).toString() + l.get(2), l);
            map_jf_3.put(l.get(1).toString() + l.get(2) + l.get(3), l);
            map_jf_4.put(l.get(1).toString() + l.get(2) + l.get(3) + l.get(8), l);
            map_jf_5.put(l.get(1).toString() + l.get(2) + l.get(3) + l.get(8) + l.get(10), l);
            map_jf_6.put(l.get(1).toString() + l.get(2) + l.get(3) + l.get(8) + l.get(10) + l.get(23), l);
        }


//        ExcelWriter ew_4 = ExcelUtil.getWriter("D:/tmp/db/4.xlsx");
//        ExcelWriter ew_5 = ExcelUtil.getWriter("D:/tmp/db/5.xlsx");
        ExcelWriter ew_6 = ExcelUtil.getWriter("D:/tmp/ndb/数据比对(基础表)/基础对比/原始汇总.xlsx");
        Set<String> keySet = new HashSet<>();
        List<List<Object>> tlist = CollUtil.newArrayList();
        List<Object> headList = reader_wg.read(0).get(0);
        headList.add("错误类型");
        tlist.add(headList);

        handler(map_wg_1, map_jf_1, "省份", keySet, tlist);
        handler(map_wg_2, map_jf_2, "地市", keySet, tlist);
        handler(map_wg_3, map_jf_3, "运营商", keySet, tlist);
        handler(map_wg_4, map_jf_4, "网络类型", keySet, tlist);
        handler(map_wg_5, map_jf_5, "设备型号", keySet, tlist);
        handler(map_wg_6, map_jf_6, "网管系列", keySet, tlist);

        /*for(OBean oBean : map_wg_1){
            List<Object> list = map_jf_1.get(oBean.getKey());
            if(list == null){
                List<Object> tmap = oBean.getList();
                if(!keySet.contains(String.valueOf(tmap.get(15)))) {
                    tmap.add("省份");
                    tlist.add(tmap);
                    keySet.add(String.valueOf(tmap.get(15)));
                }
            }
        }

        for(OBean oBean : map_wg_2){
            List<Object> list = map_jf_2.get(oBean.getKey());
            if(list == null){
                List<Object> tmap = oBean.getList();
                if(!keySet.contains(String.valueOf(tmap.get(15)))) {
                    tmap.add("地市");
                    tlist.add(tmap);
                    keySet.add(String.valueOf(tmap.get(15)));
                }
            }
        }

        for(OBean oBean : map_wg_3){
            List<Object> list = map_jf_3.get(oBean.getKey());
            if(list == null){
                List<Object> tmap = oBean.getList();
                if(!keySet.contains(String.valueOf(tmap.get(15)))) {
                    tmap.add("运营商");
                    tlist.add(tmap);
                    keySet.add(String.valueOf(tmap.get(15)));
                }
            }
        }


        int errcnt_4 =0,errcnt_5 =0,errcnt_6 = 0;
        for(OBean oBean : map_wg_4){
            List<Object> list = map_jf_4.get(oBean.getKey());
            if(list == null){
                List<Object> tmap = oBean.getList();
//                if(tmap.size() == 15){
//                    tmap.add("省份,地市,运营商,网络类型");
//                }
//                log.info("key={},list={},{},{},{},{},{}",key,tmap.get(2),tmap.get(3),tmap.get(11),tmap.get(5),tmap.get(6),tmap.get(12));
                errcnt_4++;
                if(!keySet.contains(String.valueOf(tmap.get(15)))) {
                    tmap.add("网络类型");
                    tlist.add(tmap);
                    keySet.add(String.valueOf(tmap.get(15)));
                }
            }
        }
//        ew_4.write(tlist);
//        ew_4.flush();
//        ew_4.close();
        log.info("errcnt_4 = {}",errcnt_4);

//        tlist.clear();
//        tlist.add(headList);
        for(OBean oBean : map_wg_5){
            List<Object> list = map_jf_5.get(oBean.getKey());
            if(list == null){
                List<Object> tmap = oBean.getList();
//                if(tmap.size() == 15) {
//                    tmap.add("设备型号");
//                }
//                log.info("key={},list={},{},{},{},{},{}",key,tmap.get(2),tmap.get(3),tmap.get(11),tmap.get(5),tmap.get(6),tmap.get(12));
                errcnt_5++;
                if(!keySet.contains(String.valueOf(tmap.get(15)))) {
                    tmap.add("设备型号");
                    tlist.add(tmap);
                    keySet.add(String.valueOf(tmap.get(15)));
                }
            }
        }
//        ew_5.write(tlist);
//        ew_5.flush();
//        ew_5.close();
        log.info("errcnt_5 = {}",errcnt_5);

//        tlist.clear();
//        tlist.add(headList);
        for(OBean oBean : map_wg_6){
            List<Object> list = map_jf_6.get(oBean.getKey());
            if(list == null){
                List<Object> tmap = oBean.getList();
//                if(tmap.size() == 15) {
//                    tmap.add("网管系列");
//                }
//                log.info("key={},list={},{},{},{},{},{}",key,tmap.get(2),tmap.get(3),tmap.get(11),tmap.get(5),tmap.get(6),tmap.get(12));
                errcnt_6++;
                if(!keySet.contains(String.valueOf(tmap.get(15)))) {
                    tmap.add("网管系列");
                    tlist.add(tmap);
                    keySet.add(String.valueOf(tmap.get(15)));
                }
            }
        }
        */
        ew_6.write(tlist);
        ew_6.flush();
        ew_6.close();
        log.info("---end");
    }


    public static void handler(List<OBean> list_param, Map<String, List<Object>> map_param, String tag, Set<String> keySet, List<List<Object>> tlist) {
        for (OBean oBean : list_param) {
            List<Object> list = map_param.get(oBean.getKey());
            if (list == null) {
                List<Object> tmap = oBean.getList();
//                if(tmap.size() == 15) {
//                    tmap.add("网管系列");
//                }
//                log.info("key={},list={},{},{},{},{},{}",key,tmap.get(2),tmap.get(3),tmap.get(11),tmap.get(5),tmap.get(6),tmap.get(12));
                if (!keySet.contains(String.valueOf(tmap.get(14)))) {
                    tmap.add(tag);
                    tlist.add(tmap);
                    keySet.add(String.valueOf(tmap.get(14)));
                }
            }
        }
    }

}
